import tkinter as tk
import random
from tkinter import messagebox, simpledialog

# 添加生成状态锁
is_generating = False
# 初始化随机数范围
min_value = 1
max_value = 6

# 添加历史记录列表
history = []

def show_random_number(event):
    global is_generating
    # 如果正在生成中，则忽略新的事件
    if is_generating:
        return
    # 锁定状态并显示临时提示
    is_generating = True
    result_label.config(text="生成中...", fg="gray")
    # 延迟后生成数字并解锁
    root.after(600, update_number)

def update_number():
    global is_generating
    number = random.randint(min_value, max_value)
    result_label.config(text=f"随机数: {number}", fg="black")
    history.append(number)  # 添加到历史记录
    is_generating = False  # 解锁状态
    # 2秒后解锁
    root.after(2000, lambda: set_generating_state(False))

def set_generating_state(state):
    global is_generating
    is_generating = state

def open_settings():
    global min_value, max_value
    # 创建自定义对话框
    dialog = tk.Toplevel(root)
    dialog.title("设置")
    dialog.geometry("300x150")
    
    # 创建输入框和标签
    tk.Label(dialog, text="最小值:").grid(row=0, column=0, padx=5, pady=5)
    min_entry = tk.Entry(dialog)
    min_entry.grid(row=0, column=1, padx=5, pady=5)
    
    tk.Label(dialog, text="最大值:").grid(row=1, column=0, padx=5, pady=5)
    max_entry = tk.Entry(dialog)
    max_entry.grid(row=1, column=1, padx=5, pady=5)
    
    # 确认按钮回调
    def confirm():
        global min_value, max_value
        try:
            new_min = int(min_entry.get())
            new_max = int(max_entry.get())
            if new_min > new_max:
                messagebox.showerror("错误", "最小值不能大于最大值")
                return
            min_value, max_value = new_min, new_max
            dialog.destroy()
        except (ValueError, TypeError):
            messagebox.showerror("错误", "请输入有效的整数")
    
    # 创建中文化按钮
    btn_frame = tk.Frame(dialog)
    btn_frame.grid(row=2, columnspan=2, pady=10)
    
    tk.Button(btn_frame, text="确定", command=confirm).pack(side=tk.LEFT, padx=10)
    tk.Button(btn_frame, text="取消", command=dialog.destroy).pack(side=tk.RIGHT, padx=10)
    
    # 使对话框保持焦点
    dialog.grab_set()

def show_history():
    # 创建历史记录对话框
    dialog = tk.Toplevel(root)
    dialog.title("历史记录")
    dialog.geometry("300x200")
    
    # 创建文本框显示历史记录，并设置为只读
    history_text = tk.Text(dialog, height=10, width=40, state='disabled')
    history_text.pack(padx=10, pady=10)
    
    # 插入历史记录
    for number in history:
        history_text.config(state='normal')  # 临时启用编辑模式以插入文本
        history_text.insert(tk.END, f"{number}\n")
        history_text.config(state='disabled')  # 再次禁用编辑模式
    
    # 使对话框保持焦点
    dialog.grab_set()

# 创建主窗口
root = tk.Tk()
root.title("随机数生成器")
root.geometry("500x400")

# 添加菜单栏
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)

# 添加一个简单的菜单项
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="文件", menu=file_menu)
file_menu.add_command(label="查看历史记录", command=show_history)  # 添加查看历史记录命令
file_menu.add_command(label="退出", command=root.quit)

# 添加设置菜单项
settings_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="设置", menu=settings_menu)
settings_menu.add_command(label="打开设置", command=open_settings)

# 标签控件（优化初始提示）
result_label = tk.Label(
    root, 
    text="按下回车生成随机数", 
    font=('Helvetica', 18),
    pady=30  # 增大垂直间距
)
result_label.pack()

# 绑定全局回车键事件
root.bind('<Return>', show_random_number)

# 运行主循环
root.mainloop()